function demodulated_bits = tdma_demodulate(received_signal, M)
% tdma_demodulate - 解调TDMA接收信号
%
% 输入参数:
%   received_signal - 接收的调制信号
%   M              - 调制阶数 (默认为2, 类似于GMSK)
%
% 输出参数:
%   demodulated_bits - 解调后的比特序列

% 在GSM(2G)系统中，使用相干解调或非相干解调来解调GMSK信号
% 这里使用相位差检测的方法，因为GMSK是一种CPM(连续相位调制)

% 参数设置
samples_per_bit = 8;  % 每比特的采样点数

% 计算相位
phase = unwrap(angle(received_signal));

% 计算相位差 (相位差正比于调制比特)
phase_diff = diff(phase);
phase_diff = [0, phase_diff];  % 补充第一个元素

% 去除相位噪声和干扰
% 使用移动平均滤波器平滑相位差
window_size = samples_per_bit;
smoothed_phase_diff = filter(ones(1, window_size)/window_size, 1, phase_diff);

% 抽取每个比特对应的采样点
sampled_phase_diff = smoothed_phase_diff(samples_per_bit/2:samples_per_bit:end);

% 对抽取的相位差进行判决
% 在GMSK中，相位差为正对应于1，相位差为负对应于0
demodulated_bits = sampled_phase_diff > 0;

% 计算整个帧的长度
frame_length = floor(length(received_signal) / samples_per_bit);
demodulated_bits = demodulated_bits(1:frame_length);

end 